home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / PEAR / PackageFileManager / XMLOutput.php < prev   
PHP Script  |  2004-10-01  |  7KB  |  180 lines

  1. <?php
  2. //
  3. // +------------------------------------------------------------------------+
  4. // | PEAR :: Package File Manager                                           |
  5. // +------------------------------------------------------------------------+
  6. // | Copyright (c) 2004 Gregory Beaver                                      |
  7. // | Email         cellog@phpdoc.org                                        |
  8. // +------------------------------------------------------------------------+
  9. // | This source file is subject to version 3.00 of the PHP License,        |
  10. // | that is available at http://www.php.net/license/3_0.txt.               |
  11. // | If you did not receive a copy of the PHP license and are unable to     |
  12. // | obtain it through the world-wide-web, please send a note to            |
  13. // | license@php.net so we can mail you a copy immediately.                 |
  14. // +------------------------------------------------------------------------+
  15. // | Portions of this code based on phpDocumentor                           |
  16. // | Web           http://www.phpdoc.org                                    |
  17. // | Mirror        http://phpdocu.sourceforge.net/                          |
  18. // +------------------------------------------------------------------------+
  19. // $Id: XMLOutput.php,v 1.4 2004/02/07 18:04:00 cellog Exp $
  20. //
  21.  
  22. /**
  23.  * Class for XML output
  24.  *
  25.  * @author Greg Beaver <cellog@php.net>
  26.  * @since 1.2.0
  27.  * @copyright 2003
  28.  * @package PEAR_PackageFileManager
  29.  */
  30. class PEAR_PackageFileManager_XMLOutput extends PEAR_Common {
  31.  
  32.     /**
  33.      * Generate part of an XML description with release information.
  34.      *
  35.      * @param array  $pkginfo    array with release information
  36.      * @param bool   $changelog  whether the result will be in a changelog element
  37.      *
  38.      * @return string XML data
  39.      *
  40.      * @access private
  41.      */
  42.     function _makeReleaseXml($pkginfo, $changelog = false)
  43.     {
  44.         $indent = $changelog ? "  " : "";
  45.         $ret = "$indent  <release>\n";
  46.         if (!empty($pkginfo['version'])) {
  47.             $ret .= "$indent    <version>$pkginfo[version]</version>\n";
  48.         }
  49.         if (!empty($pkginfo['release_date'])) {
  50.             $ret .= "$indent    <date>$pkginfo[release_date]</date>\n";
  51.         }
  52.         if (!empty($pkginfo['release_license'])) {
  53.             $ret .= "$indent    <license>$pkginfo[release_license]</license>\n";
  54.         }
  55.         if (!empty($pkginfo['release_state'])) {
  56.             $ret .= "$indent    <state>$pkginfo[release_state]</state>\n";
  57.         }
  58.         if (!empty($pkginfo['release_notes'])) {
  59.             $ret .= "$indent    <notes>".htmlspecialchars($pkginfo['release_notes'])."</notes>\n";
  60.         }
  61.         if (!empty($pkginfo['release_warnings'])) {
  62.             $ret .= "$indent    <warnings>".htmlspecialchars($pkginfo['release_warnings'])."</warnings>\n";
  63.         }
  64.         if (isset($pkginfo['release_deps']) && sizeof($pkginfo['release_deps']) > 0) {
  65.             $ret .= "$indent    <deps>\n";
  66.             foreach ($pkginfo['release_deps'] as $dep) {
  67.                 $ret .= "$indent      <dep type=\"$dep[type]\" rel=\"$dep[rel]\"";
  68.                 if (isset($dep['version'])) {
  69.                     $ret .= " version=\"$dep[version]\"";
  70.                 }
  71.                 if (isset($dep['optional'])) {
  72.                     $ret .= " optional=\"$dep[optional]\"";
  73.                 }
  74.                 if (isset($dep['name'])) {
  75.                     $ret .= ">$dep[name]</dep>\n";
  76.                 } else {
  77.                     $ret .= "/>\n";
  78.                 }
  79.             }
  80.             $ret .= "$indent    </deps>\n";
  81.         }
  82.         if (isset($pkginfo['configure_options'])) {
  83.             $ret .= "$indent    <configureoptions>\n";
  84.             foreach ($pkginfo['configure_options'] as $c) {
  85.                 $ret .= "$indent      <configureoption name=\"".
  86.                     htmlspecialchars($c['name']) . "\"";
  87.                 if (isset($c['default'])) {
  88.                     $ret .= " default=\"" . htmlspecialchars($c['default']) . "\"";
  89.                 }
  90.                 $ret .= " prompt=\"" . htmlspecialchars($c['prompt']) . "\"";
  91.                 $ret .= "/>\n";
  92.             }
  93.             $ret .= "$indent    </configureoptions>\n";
  94.         }
  95.         if (isset($pkginfo['provides'])) {
  96.             foreach ($pkginfo['provides'] as $key => $what) {
  97.                 $ret .= "$indent    <provides type=\"$what[type]\" ";
  98.                 $ret .= "name=\"$what[name]\" ";
  99.                 if (isset($what['extends'])) {
  100.                     $ret .= "extends=\"$what[extends]\" ";
  101.                 }
  102.                 $ret .= "/>\n";
  103.             }
  104.         }
  105.         if (isset($pkginfo['filelist'])) {
  106.             $ret .= "$indent    <filelist>\n";
  107.             $ret .= $this->_doFileList($indent, $pkginfo['filelist'], '/');
  108.             $ret .= "$indent    </filelist>\n";
  109.         }
  110.         $ret .= "$indent  </release>\n";
  111.         return $ret;
  112.     }
  113.  
  114.     /**
  115.      * Generate the <filelist> tag
  116.      * @access private
  117.      * @return string
  118.      */
  119.     function _doFileList($indent, $filelist, $curdir)
  120.     {
  121.         $ret = '';
  122.         foreach ($filelist as $file => $fa) {
  123.             if (isset($fa['##files'])) {
  124.                 $ret .= "$indent      <dir";
  125.             } else {
  126.                 $ret .= "$indent      <file";
  127.             }
  128.  
  129.             if (isset($fa['role'])) {
  130.                 $ret .= " role=\"$fa[role]\"";
  131.             }
  132.             if (isset($fa['baseinstalldir'])) {
  133.                 $ret .= ' baseinstalldir="' .
  134.                     htmlspecialchars($fa['baseinstalldir']) . '"';
  135.             }
  136.             if (isset($fa['md5sum'])) {
  137.                 $ret .= " md5sum=\"$fa[md5sum]\"";
  138.             }
  139.             if (isset($fa['platform'])) {
  140.                 $ret .= " platform=\"$fa[platform]\"";
  141.             }
  142.             if (!empty($fa['install-as'])) {
  143.                 $ret .= ' install-as="' .
  144.                     htmlspecialchars($fa['install-as']) . '"';
  145.             }
  146.             $ret .= ' name="' . htmlspecialchars($file) . '"';
  147.             if (isset($fa['##files'])) {
  148.                 $ret .= ">\n";
  149.                 $recurdir = $curdir;
  150.                 if ($recurdir == '///') {
  151.                     $recurdir = '';
  152.                 }
  153.                 $ret .= $this->_doFileList("$indent ", $fa['##files'], $recurdir . $file . '/');
  154.                 $displaydir = $curdir;
  155.                 if ($displaydir == '///' || $displaydir == '/') {
  156.                     $displaydir = '';
  157.                 }
  158.                 $ret .= "$indent      </dir> <!-- $displaydir$file -->\n";
  159.             } else {
  160.                 if (empty($fa['replacements'])) {
  161.                     $ret .= "/>\n";
  162.                 } else {
  163.                     $ret .= ">\n";
  164.                     foreach ($fa['replacements'] as $r) {
  165.                         $ret .= "$indent        <replace";
  166.                         foreach ($r as $k => $v) {
  167.                             $ret .= " $k=\"" . htmlspecialchars($v) .'"';
  168.                         }
  169.                         $ret .= "/>\n";
  170.                     }
  171.                     $ret .= "$indent      </file>\n";
  172.                 }
  173.             }
  174.         }
  175.         return $ret;
  176.     }
  177.     
  178. }
  179.  
  180. ?>